<?php

namespace Core\Contracts;

use Core\Request;
use Core\Response;

/**
 * Interface Middleware
 *
 * 定义了中间件的契约。
 * 中间件可以在控制器动作执行之前或之后执行逻辑。
 */
interface Middleware
{
    /**
     * 处理传入的请求并生成响应。
     *
     * @param Request $request 当前的请求对象
     * @param callable $next 下一个要执行的中间件或控制器动作。
     * $next($request) 将返回一个 Response 对象。
     * @return Response 必须返回一个 Response 对象
     */
    public function handle(Request $request, callable $next): Response;
}